import { Login } from "@/api/user.js";
// 导入路由
import $router from "@/router/index.js";
// ele
import { Message } from "element-ui";
// 导入vue
import Vue from "vue";
// 导入提示插件
import Notify from "@/plugin/Notify/index.js";
// 使用插件
Vue.use(Notify);
export default {
  state: {
    // 用户信息
    userInfo: {
      name: "",
      score: 0,
    },
    // token标识
    token: "",
  },
  mutations: {
    // 负责修改用户信息
    SET_USERINFO(state, data) {
      // 更新state的userInfo信息，
      state.userInfo = data;
      // 本地存储用户信息
      localStorage.setItem("user", JSON.stringify(data));
    },
    // 修改token
    SET_TOKEN(state, data) {
      state.token = data;
      // token本来就是字符串，就不需要JSON.stringify
      localStorage.setItem("token", data);
    },
  },
  actions: {
    // 负责退出
    logout(context) {
      context.commit("SET_USERINFO", {});
      context.commit("SET_TOKEN", "");
    },
    // 负责登录（登录是异步的需要放在actions中）
    login(context, data) {
      Login(data)
        .then((res) => {
          // 200代表成功其他代表失败
          if (res.data.code === 200) {
            Message({
              message: "登陆成功",
              type: "success",
            });
            // Notify.success(res.data.msg || "登录成功");
            // 登录成弹出设置用户信息与设置token
            context.commit("SET_USERINFO", res.data.user);
            context.commit("SET_TOKEN", res.data.token);
            // 跳转到redirect对应页面
            // 获取当前留言信息
            var $route = $router.history.current;
            // 获取查询参数
            var redirect = $route.query.redirect || "/admin";
            // 实现跳转
            $router.replace(redirect);
          } else {
            // Notify.danger(res.data.msg || "登录失败");
            Message({
              message: "需要先登录",
              type: "warning",
            });
            // 登录不成功清空用户信息
            context.commit("SET_USERINFO", {});
            context.commit("SET_TOKEN", "");
          }
        })
        // 失败显网络失败
        .catch((err) => {
          console.log(err);
          // alert("网络失败")
          Notify.danger("登录失败");
        });
    },
  },
};
